package br.com.crednove.modelo;

import br.com.crednove.controle.ControleImportar;
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class Excel {

    private Workbook workbook;
    private Sheet folhas[];
    private int numFolhas;
    private int numColunas;
    private int numLinhasTotal;
    private Cliente cliente;
    private ClienteRefin clienteRefin;
    private int INDICE_COMECO_PARCELAS = 1;

    public Excel() {
        this.numFolhas = 0;
        this.numColunas = 0;
        this.numLinhasTotal = 0;
        this.folhas = null;
        this.workbook = null;
        this.cliente = new Cliente();
        this.clienteRefin = new ClienteRefin();
    }

    public boolean abrirArquivo(File arquivo) {
        try {
            this.workbook = Workbook.getWorkbook(arquivo);
            this.folhas = this.workbook.getSheets();
            this.numFolhas = this.folhas.length;
            this.numColunas = this.folhas[0].getColumns();
            this.numLinhasTotal = this.numLinhasTotal + (this.folhas[0].getRows());
            return true;
        } catch (IOException ex) {
            return false;
        } catch (BiffException ex) {
            return false;
        }
    }

    public String[] importaColunas() {
        String campos[] = new String[numColunas];
        for (int i = 0; i < this.numColunas; i++) {
            Cell celula = folhas[0].getCell(i, 0);
            campos[i] = celula.getContents();
        }
        return campos;
    }
    
    public Cliente importaCliente(int folha, int linha, int campos[]) {
        this.cliente.limparInformacoes();
        for (int i = 0; i < campos.length; i++) {
            if (campos[i] != ControleImportar.SEM_VINCULO) {
                Cell celula = folhas[folha].getCell(campos[i], linha);
                cliente.preencheCampo(i, celula.getContents());
            }
        }
        return cliente;
    }

    public ClienteRefin importaClienteRefin(int linha, float coeficiente) {
        this.clienteRefin.limparInformacoes();
        this.clienteRefin.getCliente().setCpf(folhas[0].getCell(0, linha).getContents());
        
        Parcela parcela = null;
        for (int i = INDICE_COMECO_PARCELAS; i < this.numColunas; i++) {
            int campo = i % 5;
            Cell celula = folhas[0].getCell(i, linha);

            if (campo == 1) {
                parcela = new Parcela();
            } else {
                parcela.preencheCampo(campo, celula.getContents());
                if (campo == 0) {
                    if (parcela.getSaldoRefin() != 0 && parcela.getValorParcela() != 0) {
                        parcela.setParcelasPagas(parcela.getParcelasContrato() - parcela.getParcelasEmAberto());
                        parcela.setBruto(parcela.calcularBruto(parcela.getValorParcela(), coeficiente));
                        parcela.setLiquido(parcela.calcularLiquido(parcela.getBruto(), parcela.getSaldoRefin()));
                        this.clienteRefin.getParcelas().add(parcela);
                    }
                }
            }
        }
        return this.clienteRefin;
    }
    
    public void fechar(){
        this.workbook.close();
    }
    
    public Sheet[] getFolhas() {
        return folhas;
    }

    public int getNumFolhas() {
        return numFolhas;
    }

    public int getNumColunas() {
        return numColunas;
    }

    public int getNumLinhasTotal() {
        return numLinhasTotal;
    }

}
